// redux的js文件 不是组件 普通的js  store state  action reducer
import {createStore} from 'redux'

// 原始数据 state 类似vuex中的state
let initState = {
    age: 18,
    add: 'hnzz'
}

// action是一个普通的obj 一定会有type属性  用来描述如何修改数据 {type:'xxx', val: 'yyy'}
// actionTypes 是一个对象 用来统一管理action的type属性值
const actionType = {
    ageAdd: 'ageAdd',
    changeAdd: 'changeAdd'
}
// action的生成器 作用是生成需要的action  统一管理action 方便又减少出错
export const actionCreator = {
    // 剪头函数的缩写，返回一个对象
    ageAdd: ()=> ({type: actionType.ageAdd}),
    changeAdd: (val)=>({type: actionType.changeAdd, val})
}

// reducer 是一个函数 用来修改数据并返回最新的值 只换不修
// 它是一个纯函数 （没有读写操作、函数中没有随机数时间等可变值 根据参数可以确定返回值的函数）
const reducer = (state=initState, action)=>{
    // console.log(action);
    switch (action.type) {
        case actionType.ageAdd:
            // 年龄加一
            return { // 用新的值替换老的值
                ...state, // 扩展运算符 先拷贝原来的值
                age: state.age + 1 // 更新需要更新的值 新的值覆盖老的值 其他不变
            }
    
        case actionType.changeAdd: // 修改地址
            return { // 用新的值替换老的值
                ...state, // 扩展运算符 先拷贝原来的值
                add: action.val // 更新需要更新的值 新的值覆盖老的值 其他不变
            }
    
        default:
            return state
    }
}

// 创建仓库
const store = createStore(reducer)

export default store
